<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('work_injury_disability_assessments', function (Blueprint $table) {
            $table->id();
            $table->timestamps();

            // 关联工伤记录
            $table->unsignedBigInteger('work_injury_record_id');
            $table->string('injury_number', 50)->nullable();

            // 员工信息
            $table->unsignedBigInteger('employee_id');
            $table->string('employee_name', 100)->nullable();
            $table->string('employee_number', 50)->nullable();
            $table->string('id_card_number', 18)->nullable();

            // 鉴定基本信息
            $table->string('assessment_number', 50)->unique(); // 鉴定编号
            $table->datetime('assessment_date'); // 鉴定日期
            $table->string('assessment_hospital', 200); // 鉴定医院
            $table->string('assessment_doctor', 100)->nullable(); // 主鉴定医生

            // 鉴定结果
            $table->string('disability_level', 20); // 伤残等级：1-10级
            $table->decimal('disability_percentage', 5, 2)->nullable(); // 伤残比例
            $table->text('assessment_result'); // 鉴定结果描述
            $table->text('medical_opinion'); // 医疗意见
            $table->text('functional_impairment'); // 功能障碍描述

            // 护理依赖程度
            $table->string('nursing_level', 20)->nullable(); // 护理等级：完全护理, 大部分护理, 部分护理
            $table->boolean('requires_long_term_care')->default(false); // 是否需要长期护理

            // 补助标准
            $table->decimal('monthly_allowance', 10, 2)->nullable(); // 月补助金
            $table->decimal('one_time_compensation', 12, 2)->nullable(); // 一次性补偿
            $table->decimal('medical_subsidy', 10, 2)->nullable(); // 医疗补助
            $table->decimal('nursing_subsidy', 10, 2)->nullable(); // 护理补助
            $table->decimal('total_compensation', 12, 2)->nullable(); // 总补偿金额

            // 发放周期
            $table->string('payment_cycle', 20)->default('monthly'); // monthly, quarterly, annually, one_time
            $table->integer('payment_years')->nullable(); // 发放年限
            $table->date('payment_start_date')->nullable(); // 发放起始日期
            $table->date('payment_end_date')->nullable(); // 发放结束日期

            // 发放记录
            $table->json('payment_records')->nullable(); // 发放记录数组
            $table->decimal('total_paid_amount', 12, 2)->default(0); // 已发放总金额
            $table->decimal('remaining_amount', 12, 2)->nullable(); // 剩余金额
            $table->boolean('all_payments_completed')->default(false); // 是否全部发放完毕

            // 复查信息
            $table->boolean('requires_review')->default(false); // 是否需要复查
            $table->date('next_review_date')->nullable(); // 下次复查日期
            $table->text('review_notes')->nullable(); // 复查备注

            // 状态管理
            $table->string('status', 20)->default('pending'); // pending, completed, appealed, reviewed
            $table->boolean('is_final')->default(false); // 是否为最终结果
            $table->datetime('finalized_at')->nullable(); // 最终确定时间

            // 上诉信息
            $table->boolean('has_appeal')->default(false); // 是否有上诉
            $table->string('appeal_result', 50)->nullable(); // 上诉结果
            $table->text('appeal_notes')->nullable(); // 上诉备注

            // 备注和附件
            $table->text('notes')->nullable();
            $table->json('attachments')->nullable(); // 鉴定报告、医疗资料等

            // 创建者信息
            $table->string('created_by', 100)->nullable();
            $table->string('updated_by', 100)->nullable();

            // 索引
            $table->index(['work_injury_record_id', 'assessment_date'], 'wida_wir_adate_idx');
            $table->index(['employee_id', 'assessment_date'], 'wida_emp_adate_idx');
            $table->index(['disability_level'], 'wida_level_idx');
            $table->index(['status'], 'wida_status_idx');
            $table->index(['assessment_date'], 'wida_adate_idx');
            $table->index(['is_final'], 'wida_final_idx');
            $table->index(['has_appeal'], 'wida_appeal_idx');
            $table->index(['assessment_number'], 'wida_anumber_idx');

            // 外键约束
            $table->foreign('work_injury_record_id')->references('id')->on('work_injury_records')->onDelete('cascade');
            $table->foreign('employee_id')->references('id')->on('employees')->onDelete('cascade');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('work_injury_disability_assessments');
    }
};
